/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.com.jlib.ev.persistence.hibernate;

import java.sql.Connection;
import javax.persistence.Query;
import org.com.jlib.ev.persistence.dialect.BaseDaoImpl;
import org.hibernate.SQLQuery;

/**
 *
 * @author afonso.rodrigues
 */
public class BaseDaoHibernate extends BaseDaoImpl{
        /**
     * Permite exportar a conexão utilizada pelo EntityManager.
     *
     * ATENCAO: esta funcionalidade não é recomendada uma vez que é dependente da implementação JPA em uso
     * (no caso Hibernate) e expõe sua estrutura interna.
     * Porém foi incluída para permitir utilizar métodos de serviço de aplicações externas e contornar os problemas
     * com acentuação em campos LOB do Oracle quando utilizado o Hibernate.
     *
     * @return Conexão com o banco de dados utilizada pelo EntityManager da sessão.
     */
    @Override
    public Connection getConexao() {
        Connection connection = null;
        if (entityManager != null) {
            connection = (Connection) HibernateUtil.getSessionFactory().openSession();
        }
        return connection;
    }

    public Query criaQueryHibernate(String hql) {
        org.hibernate.Session s = (org.hibernate.Session) entityManager.getDelegate();
        Query query = (Query) s.createQuery(hql);
        return query;
    }

    public SQLQuery criaQueryNativaHibernate(String sql) {
    	org.hibernate.Session s = (org.hibernate.Session) entityManager.getDelegate();
    	SQLQuery query = s.createSQLQuery(sql);
    	return query;
    }
}
